package pe.gob.foncodes.spp.bs.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import pe.gob.foncodes.sgp.bs.commons.Constant;
import pe.gob.foncodes.spp.bs.domain.Parametro;

@Repository
public class ParametroDAOImpl extends BaseDAO<Parametro> implements ParametroDAO {

	@Autowired
	public ParametroDAOImpl(SessionFactory sessionFactory) {
		super(sessionFactory);

	}

	public List<Parametro> buscarEstadosPortafolioActivos() {
		StringBuilder sql = new StringBuilder();
		sql.append(" select a from Parametro a where a.txtTabla = '" + Constant.PORTAFOLIO + "' ");
		sql.append(" and a.txtTablaAux = '" + Constant.ESTADO + "' ");
		sql.append(" and a.flgActivo = '1' ");
		
		return findByQuery(sql);
	}

	public List<Parametro> buscarTipoObjetivo() {
		StringBuilder sql = new StringBuilder();
		sql.append(" select a from Parametro a where a.txtTabla = '" + Constant.OBJETIVO + "' ");
		sql.append(" and a.txtTablaAux = '" + Constant.TIPO + "' ");
		sql.append(" and a.flgActivo = '1' ");
		
		return findByQuery(sql);
	}
	
	public List<Parametro> buscarEstadosGeneralesActivoNoActivo() {
		StringBuilder sql = new StringBuilder();
		sql.append(" select a from Parametro a where a.txtTabla = '" + Constant.GENERAL + "' ");
		sql.append(" and a.txtTablaAux = '" + Constant.ESTADO + "' ");
		sql.append(" and a.flgActivo = '1' ");
		
		return findByQuery(sql);
	}

	public List<Parametro> buscarModalidadEjecucionPortafolioActivos() {
		StringBuilder sql = new StringBuilder();
		sql.append(" select a from Parametro a where a.txtTabla = '" + Constant.PORTAFOLIO + "' ");
		sql.append(" and a.txtTablaAux = '" + Constant.EJECUCION + "' ");
		sql.append(" and a.flgActivo = '1' ");
		
		return findByQuery(sql);
	}

	public Parametro buscarObjetivoPrecedentePorTipoObjetivo(String tipObjetivo) {
		StringBuilder sql = new StringBuilder();
		sql.append(" select a from Parametro a where a.txtTabla = '" + Constant.OBJETIVO + "' ");
		sql.append(" and a.txtTablaAux = '" + Constant.TIPO + "' ");
		sql.append(" and a.codParametro ='"+tipObjetivo+"'");
		sql.append(" and a.flgActivo = '1' ");
		List<Parametro> lista = findByQuery(sql);
		if (lista !=null && !lista.isEmpty()){
			return lista.get(0);
		}
		return null;
	}
	
	public List<Parametro> buscarIndicadorPeriodo(){
		StringBuilder sql = new StringBuilder();
		sql.append(" select a from Parametro a where a.txtTabla = '" + Constant.INDICADOR + "' ");
		sql.append(" and a.txtTablaAux = '" + Constant.PERIODO + "' ");
		sql.append(" and a.flgActivo = '1' ");
		
		return findByQuery(sql);
	}

	public List<Parametro> buscarIndicadorTipos(){
		StringBuilder sql = new StringBuilder();
		sql.append(" select a from Parametro a where a.txtTabla = '" + Constant.INDICADOR + "' ");
		sql.append(" and a.txtTablaAux = '" + Constant.TIPO + "' ");
		sql.append(" and a.flgActivo = '1' ");
		
		return findByQuery(sql);
	}
}
